package org.springblade.modules.admin.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.modules.admin.dto.UserCertDTO;
import org.springblade.modules.admin.entity.UserCert;
import org.springblade.modules.admin.vo.UserCertVO;
import org.springblade.modules.admin.vo.cert.UserCertStatisticsVO;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;

public interface UserCertService extends BaseService<UserCert> {

	IPage<UserCertVO> selectUserCertPage(IPage<UserCertVO> page, UserCertDTO userCert);

	/**
	 * 新增
	 * @param userCert
	 * @return
	 */
	boolean insert(UserCert userCert);

	/**
	 * 更新
	 * @param userCert
	 * @return
	 */
	boolean update(UserCert userCert);

	/**
	 * 详情
	 * @param id
	 * @return
	 */
	UserCertVO detail(Long id);

	/**
	 * 根据用户id查询列表
	 * @param userId 用户id
	 * @return
	 */
	List<UserCertVO> selectListByUserId(Long userId);

	/**
	 * 批量更新
	 * @param userCerts
	 * @return
	 */
	boolean batchUpdate(List<UserCert> userCerts);

	/**
	 * 针对用户批量插入或更新
	 * @param userId
	 * @param userCerts
	 */
	void batchSaveOrUpdate(Long userId, List<UserCert> userCerts);

	/**
	 * 统计
	 * @return
	 */
	UserCertStatisticsVO statistics();

	/**
	 * 检验证件的唯一性
	 * @param userCert
	 * @return
	 */
	boolean checkCertUniqueness(UserCert userCert);

	/**
	 * 根据userId删除证件
	 * @param userId
	 */
	void deleteByUserId(Long userId);

	/**
	 * 下载excel模板
	 * @param response
	 */
    void downExcelTemplate(HttpServletResponse response);

	/**
	 * 上传导入
	 * @param file
	 * @param isCover 是否覆盖
	 * @return
	 */
	Map<String, Object> uploadExcel(MultipartFile file, boolean isCover);

	/**
	 * 下载导入错误数据
	 * @param response
	 */
	void downErrExcel(HttpServletResponse response);

	/**
	 * 导出数据
	 * @param userCert
	 * @param response
	 */
	void exportExcel(UserCertDTO userCert, HttpServletResponse response) throws IOException;

	/**
	 * 查询所有
	 * @return
	 */
	List<UserCertVO> selectAllList();

	/**
	 * 发送消息给管理员
	 * @param certContentTemplateFormat 证件内容模板格式
	 */
    void sendMsgToAdministrator(String certContentTemplateFormat);
}
